# @Version:1.0
# @Author：green-citrus

# # 字典的定义
# tel = {"jack": 409, "tom": 4139}
# print(f"dict_tel: {tel} 类型：{type(tel)}")
#
# # 查询jack的tel
# print("jack的tel：", tel["jack"])

# dict_a = {
#     "jack": [100, 200, 300],
#     "mary": [10, 20, "hello"],
#     "nono": {"apple", "pear"},
#     "smith": "计算机老师",
#     "周星驰": {
#         "性别": "男",
#         "age": 18,
#         "地址": "香港"
#     }
# }

# dict_b = {"one": 1, "two": 2, "three": 3}
# # 遍历方式1：依次取出key，再通过dict[key]取出对应的value
# for key in dict_b:
#     print(f"key: {key}  value: {dict_b[key]}")
#
# # 遍历方式2：依次取出value
# for value in dict_b.values():
#     print(f"value: {value}")
#
# # 遍历方式3：依次取出key-value
# for k, v in dict_b.items():
#     print(f"key: {k}  value: {v}")

# # 创建空字典
# dict_c = {}
# dict_d = dict()
#
# print(type(dict_c))
# print(type(dict_d))

# dict_e = {"one": 1, "two": 2, "three": 3, "two": 200}
# print(f"dict_e: {dict_e}")


# dict_a = {"one": 1, "two": 2, "three": 3}
# # （1）len(d)：返回字典d中的项数，也就是有多少键值对
# print(f"dict_a中有 {len(dict_a)} 对键值对") # 3
#
# # （2）d[key]：返回 d 中以 key 为键的项。如果映射中不存在 key 则会引发KeyError
# print("key为three对应的value:", dict_a["three"]) # 3
#
# # （3）d[key] = value：将d[key] 设为value，如果key已经存在，则是修改value，如果key没有存在，则是增加key-value
# # 需求1：修改 key = "one" 对应的 value 为 第一
# dict_a["one"] = "第一"
# print(dict_a) # {"one": 第一, "two": 2, "three": 3}
#
# # 需求2：增加 key 为 "four" value 为 4
# dict_a["four"] = 4
# print(dict_a) # {"one": 第一, "two": 2, "three": 3, "four": 4}
#
# # （4）del d[key]：将d[key] 从 d 中移除。如果映射中不存在key则会引发KeyError
# # 需求：删除 key 为 “four”的元素
# del dict_a["four"]
# print(dict_a) # {"one": 第一, "two": 2, "three": 3}
#
# # （5）pop(key[，default])：如果key存在于字典中则将其移除并返回其值，否则返回 default。如果default未给出且key不存在于字典中，则会引发KeyError
# # 需求：将 key 为 “one” 的值返回，并将该元素从字典中移除
# val = dict_a.pop("one") # one存在，返回one对应的value
# print(f"val: {val}") # 第一
# print(f"dict_a: {dict_a}") # {"two": 2, "three": 3}
#
# val = dict_a.pop("two~", "哈哈") # one~ 不存在，返回默认值 “哈哈”
# print(f"val: {val}") # 哈哈
# print(f"dict_a: {dict_a}") # {"two": 2, "three": 3}
#
# # （6）keys()：返回字典所有的key
# dict_a_keys = dict_a.keys()
# print(f"dict_a_keys: {dict_a_keys}") # dict_keys(['two', 'three'])
# print(f"类型：{type(dict_a_keys)}") # <class 'dict_keys'>
#
# for k in dict_a_keys:
#     print("k->", k)
#
# # （7）key in d：如果 d 中存在键key 则返回 True，否则返回 False
# # 需求：判断字典中是否有 key "two"
# if "two" in dict_a:
#     print(dict_a["two"]) # 2
#
# # （8）clear()：移除字典中的所有元素
# dict_a.clear()
# print(f"dict_a: {dict_a}") # {}

# books = ["红楼梦", "三国演义", "西游记", "水浒传"]
# authors = ["曹雪芹", "罗贯中", "吴承恩", "施耐庵"]
#
# dict_book = {book: author for book, author in zip(books, authors)}
# print(dict_book) # {'红楼梦': '曹雪芹', '三国演义': '罗贯中', '西游记': '吴承恩', '水浒传': '施耐庵'}
#
# str1 = "早上好"
# dict_test = {ele1: ele2 * 2 for ele1, ele2 in zip(str1, str1)}
# print(dict_test)

# english_list = ["red", "black", "yellow", "white"]
# chinese_list = ["红色", "黑色", "黄色", "白色"]
# dict_color = {zh: en.upper() for zh, en in zip(chinese_list, english_list)}
# print(dict_color)

# 一个公司有多个员工，请使用合适的数据类型保存员工的信息（比如员工号、年龄、名字、入职时间、薪水等)
# 要求：
# 1）员工号是入职时分配的，唯一不重复
clerks = {
    "0001": {
        "age": 20,
        "name": "贾宝玉",
        "entry_time": "2011-11-11",
        "sal": 2000
    },
    "0002": {
        "age": 22,
        "name": "薛宝钗",
        "entry_time": "2015-12-12",
        "sal": 10000
    },
    "0010": {
        "age": 18,
        "name": "林黛玉",
        "entry_time": "2018-10-10",
        "sal": 20000
    }
}
# 2）通过员工号（0010），可以查询到员工的信息
print(f"员工号为0010的员工信息为 名字：{clerks['0010']['name']} "
      f"年龄：{clerks['0010']['age']} "
      f"入职时间：{clerks['0010']['entry_time']} "
      f"薪水：{clerks['0010']['sal']}")

# 3）可以根据需要，可以动态的增加、删除员工，请演示添加和删除一个员工
# 增加：(员工号：0020，年龄：30，名字：张三，入职时间：2020-08-10，薪水：6000)
# 删除：0001号员工
clerks["0020"] = {
    "age": 30,
    "name": "张三",
    "entry_time": "2020-08-10",
    "sal": 6000
}
print("clerks:", clerks)
print('-' * 27)

del clerks["0001"]
print("clerks:", clerks)
print('-' * 27)

# 4）可以根据需要，可以修改员工的信息（比如年龄、名字、入职时间、薪水等），
# 修改一个员工信息修改员工号为 0020 的，名字：宝钗，入职时间：1999-10-10，薪水在原来的基础上增加10%
clerks['0020']['name'] = '宝钗'
clerks['0020']['entry_time'] = '1999-10-10'
clerks['0020']['sal'] += clerks['0020']['sal'] * 0.1
print("clerks：", clerks)
print('-' * 27)

# 5）要求：遍历所有员工，把所有员工的薪水，在原工资的基础上，增加20%
keys = clerks.keys()
for key in keys:
    clerks[key]['sal'] += clerks[key]['sal'] * 0.2
print("clerks：", clerks)
print('-' * 27)

# 6）按照如下格式输出所有员工信息
# 员工号为？？的信息如下
# 年龄：？？名字：？？入职时间：？？薪水：？？
for key in keys:
    print(f"员工号为 {key} 的信息如下")
    print(f"年龄：{clerks[key]['age']} 名字：{clerks[key]['name']} "
          f"入职时间：{clerks[key]['entry_time']} 薪水：{clerks[key]['sal']}")

